package com.lt.test.entity.DTO;

import java.io.Serializable;
import java.util.List;

/**
 * 分页传输实体
 * @author zhengchuan
 *
 * @param <T>
 */
public class PageDTO<T> implements Serializable{

	private static final long serialVersionUID = 1L;
	// 传递的参数或是配置的参数
	private int currentPage = 1; // 当前页
	private int pageSize = 10; // 每页显示多少条记录

	// 查询数据库
	private List<T> recordList; // 本页的数据列表
	private int recordCount = 0; // 总记录数

	// 计算
	private int pageCount; // 总页数
	private int beginPageIndex; // 页码列表的开始索引（包含）
	private int endPageIndex; // 页码列表的结束索引（包含）

	public PageDTO() {
		super();
	}

	/**
	* 只接受4个必要的属性，会自动的计算出其他3个属性的值
	* 
	* @param currentPage
	* @param pageSize
	* @param recordList
	* @param recordCount
	*/
	public PageDTO(int currentPage, int pageSize, List<T> recordList, int recordCount) {
	this.currentPage = currentPage;
	this.pageSize = pageSize;
	this.recordList = recordList;
	this.recordCount = recordCount;

	// 计算 pageCount
	pageCount = (recordCount + pageSize - 1) / pageSize;

	// 计算 beginPageIndex 与 endPageIndex
	// >> 总页码小于等于10页时，全部显示
	if (pageCount <= 10) {
	beginPageIndex = 1;
	endPageIndex = pageCount;
	}
	// >> 总页码大于10页时，就只显示当前页附近的共10个页码
	else {
	// 默认显示 前4页 + 当前页 + 后5页
	beginPageIndex = currentPage - 4; // 7 - 4 = 3;
	endPageIndex = currentPage + 5; // 7 + 5 = 12; --> 3 ~ 12

	// 如果前面不足4个页码时，则显示前10页
	if (beginPageIndex < 1) {
	beginPageIndex = 1;
	endPageIndex = 10;
	}
	// 如果后面不足5个页码时，则显示后10页
	else if (endPageIndex > pageCount) {
	endPageIndex = pageCount;
	beginPageIndex = pageCount - 9;
	}
	}
	}

	public List<T> getRecordList() {
		return recordList;
	}

	public void setRecordList(List<T> recordList) {
		this.recordList = recordList;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public int getPageCount() {
		return pageCount;
	}

	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getRecordCount() {
		return recordCount;
	}

	public void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}

	public int getBeginPageIndex() {
		return beginPageIndex;
	}

	public void setBeginPageIndex(int beginPageIndex) {
		this.beginPageIndex = beginPageIndex;
	}

	public int getEndPageIndex() {
		return endPageIndex;
	}

	public void setEndPageIndex(int endPageIndex) {
		this.endPageIndex = endPageIndex;
	}

	@Override
	public String toString() {
		return "PageDTO [currentPage=" + currentPage + ", pageSize=" + pageSize + ", recordList=" + recordList
				+ ", recordCount=" + recordCount + ", pageCount=" + pageCount + ", beginPageIndex=" + beginPageIndex
				+ ", endPageIndex=" + endPageIndex + "]";
	}
	
	
}
